home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / BINARY.D < prev    next >
Encoding:
Modula Definition  |  1990-05-06  |  3.4 KB  |  96 lines

  1. DEFINITION MODULE Binary;
  2.  
  3. (*
  4.  * Die Funktionen in diesem Modul dürfen nur auf Disk-Dateien angewandt
  5.  * werden, die mit 'readOnly', 'writeOnly' oder 'readWrite' eröffnet wurden.
  6.  *)
  7.  
  8. FROM Files IMPORT File;
  9.  
  10. FROM SYSTEM IMPORT BYTE, WORD, LONGWORD, ADDRESS;
  11.  
  12.  
  13. TYPE    SeekMode = ( fromBegin, fromPos, fromEnd );
  14.  
  15.  
  16. (*   Lese-Funktionen
  17.  *   ---------------
  18.  * Wird versucht, über das augenblickliche Ende hinaus Daten zu lesen,
  19.  * wird die Funktion nicht ausgeführt (der Dateizeiger bleibt unverändert)
  20.  * und stattdessen der Fehler 'End of file' gesetzt.
  21.  * Nur die Funktion 'ReadBytes' weicht davon ab (s.u.).
  22.  *)
  23.  
  24. PROCEDURE ReadByte (f: File; VAR byte: BYTE);
  25.  
  26. PROCEDURE ReadWord (f: File; VAR word: WORD);
  27.  
  28. PROCEDURE ReadLong (f: File; VAR long: LONGWORD);
  29.  
  30. PROCEDURE ReadBlock (f: File; VAR block: ARRAY OF BYTE);
  31. PROCEDURE ReadLargeBlock (f: File; VAR block: LONGARRAY OF BYTE);
  32.   (* Wie 'ReadBlock', aber auch für Daten > 64 KB *)
  33.  
  34. PROCEDURE ReadBytes (    f        : File;
  35.                          addr     : ADDRESS; (* Adresse, an die geladen wird *)
  36.                          bytes    : LONGCARD;
  37.                      VAR bytesRead: LONGCARD);
  38. (*
  39.  * Diese Funktion liest höchstens 'bytes' Bytes. Wird vorher das Ende der
  40.  * Datei erreicht, werden entsprechend nur die vorhandenen Daten gelesen
  41.  * und dann die Funktion ohne Fehler beendet.
  42.  * 'bytesRead' enthält hinterher die Anzahl der gelesenen Bytes. Der Wert
  43.  * dieser Variablen liegt im Bereich [0..'bytes']. Es kann also auch vor-
  44.  * kommen, daß überhaupt kein Byte gelesen wird !
  45.  * Tritt ein Fehler beim Lesen auf, bleibt der Dateizeiger unverändert.
  46.  *)
  47.  
  48.  
  49. (*   Schreib-Funktionen
  50.  *   ------------------
  51.  * Als allgemeine Speicher-Funktionen können in der Regel verwendet werden:
  52.  * - 'WriteBlock' für beliebige Daten (ganze Variablen)
  53.  * - 'WriteBytes' für Daten, von denen man die Adresse hat (z.B. mit ALLOCATE
  54.  *   reserviert) oder bei denen man die genaue Länge selbst bestimmen möchte.
  55.  * - WriteByte/Word/Long sind alternativ zu WriteBlck verwendbar, wenn die
  56.  *   Datengröße des Parameters mit der Variablen übereinstimmt.
  57.  *)
  58.  
  59. PROCEDURE WriteByte (f: File; byte: BYTE);
  60. PROCEDURE WriteWord (f: File; word: WORD);
  61. PROCEDURE WriteLong (f: File; long: LONGWORD);
  62.  
  63. PROCEDURE WriteBlock (f: File; REF block: ARRAY OF BYTE);
  64.  
  65. PROCEDURE WriteLargeBlock (f: File; REF block: LONGARRAY OF BYTE);
  66.   (* Wie 'WriteBlock', auch für Daten > 64 KB *)
  67.  
  68. PROCEDURE WriteBytes (f: File; addr: ADDRESS; bytes: LONGCARD);
  69.   (* Speichert die Daten ab Adresse 'addr' mit der Länge 'bytes' in Byte *)
  70.  
  71.  
  72. PROCEDURE FileSize (f: File): LONGCARD;
  73.   (*
  74.    * Liefert aktuelle Dateilänge in Bytes.
  75.    *)
  76.  
  77. PROCEDURE FilePos (f: File): LONGCARD;
  78.   (*
  79.    * Liefert aktuelle Byteposition des Dateizeigers.
  80.    *)
  81.  
  82. PROCEDURE Seek (f: File; offset : LONGINT; base: SeekMode);
  83.   (*
  84.    * Positioniert den Dateizeiger relativ...
  85.    *  - zum Anfang der Datei, wenn 'base' = 'fromBegin' (offset nur positiv !),
  86.    *  - zum Dateizeiger, wenn 'base' = 'fromPos' (offset pos. o. neg.),
  87.    *  - zum Ende der Datei, wenn 'base' = 'fromEnd' (offset nur negativ !),
  88.    *
  89.    * Falls die neue Position hinter dem aktuellem Dateiende liegt, wird
  90.    * die Datei entsprechend automatisch erweitert, sofern die Datei zum
  91.    * Beschreiben eröffnet wurde. Die hinzugefügten Daten sind übrigens
  92.    * undefiniert, also keine Null-Bytes!
  93.    *)
  94.  
  95. END Binary.
  96.